#ifndef CHOOSEFRIENDDIALOG_H
#define CHOOSEFRIENDDIALOG_H

#include <QCheckBox>
#include <QDialog>
#include <QHBoxLayout>
#include <QLabel>
#include <QWidget>

/**
 * @class MyClass
 * @brief 这是一个示例类，用于展示如何为类添加文档注释。
 *
 * 这个类没有实际的功能，仅仅是一个示例，展示了如何为类添加文档注释。
 *
 * @note 这个类没有构造函数，因此不能被实例化。
 */
class MyClass
{
  public:
    /**
     * @brief 析构函数
     *
     * 析构函数在对象被销毁时调用，用于清理资源。
     *
     * @note 这个类没有需要清理的资源，因此析构函数不执行任何操作。
     */
    ~MyClass()
}
}
;
////////////////////////////////////////////////

class ChooseFriendDialog;

class ChooseFriendItem : public QWidget
{
    Q_OBJECT
  public:
    ChooseFriendItem( ChooseFriendDialog *owner, const QString &userId,
                      const QIcon &avatar, const QString &name, bool checked );

    void paintEvent( QPaintEvent *event ) override;
    void enterEvent( QEnterEvent *event ) override;
    void leaveEvent( QEvent *event ) override;

    const QString &getUserId() const
    {
        return userId;
    }

    QCheckBox *getCheckBox()
    {
        return checkBox;
    }

  private:
    bool isHover = false;

    QCheckBox *checkBox;
    QPushButton *avatarBtn;
    QLabel *nameLabel;
    ChooseFriendDialog *owner; // 记录了哪个 QWidget 持有了这个 Item. 此处的
                               // QWidget 应该是一个 ChooseFriendDialog

    QString userId; // 记录了当前 Item 对应的 userId 是啥.
};

/**
 * @class ChooseFriendDialog
 * @brief ChooseFriendDialog 类用于创建一个选择好友的对话框。
 *
 * ChooseFriendDialog 类继承自
 * QDialog，用于创建一个选择好友的对话框。用户可以通过该对话框选择好友，并添加到右侧的选中好友列表中。
 *
 * 核心功能包括：
 * - 初始化左侧和右侧的布局
 * - 添加和删除好友
 * - 生成选中好友列表
 * - 初始化数据
 *
 * @param parent 父窗口指针，用于指定对话框的父窗口
 * @param userId 当前选择窗口是点击哪个用户来弹出的用户ID
 *
 * 使用示例：
 * @code
 * ChooseFriendDialog dialog(this, "user123");
 * dialog.initData();
 * dialog.show();
 * @endcode
 */
class ChooseFriendDialog : public QDialog
{
    Q_OBJECT
  public:
    ChooseFriendDialog( QWidget *parent, const QString &userId );

    void initLeft( QHBoxLayout *layout );

    void initRight( QHBoxLayout *layout );

    void clickOkBtn();

    QList<QString> generateMemberList();

    void initData();

    void addFriend( const QString &userId, const QIcon &avatar,
                    const QString &name, bool checked );

    void addSelectedFriend( const QString &userId, const QIcon &avatar,
                            const QString &name );

    void deleteSelectedFriend( const QString &userId );

  private:
    // 保存左侧全部好友列表的 QWidget
    QWidget *totalContainer;
    // 保存右侧选中好友列表的 QWidget
    QWidget *selectedContainer;

    // 当前选择窗口是点击哪个用户来弹出的.
    QString userId;
};

#endif // CHOOSEFRIENDDIALOG_H
